
#ifndef  HELPER_SCOPE_ISCOPABLE_H
#define  HELPER_SCOPE_ISCOPABLE_H

namespace helper {
namespace scope {

template<typename T>
class IScopable {
public:
    virtual ~IScopable(){}
    virtual int enter(T & t) = 0;
    virtual int exit(T & t) = 0;
};

template<>
class IScopable<void> {
public:
    virtual ~IScopable(){}
    virtual int enter(void) = 0;
    virtual int exit(void) = 0;
};

}// end of namespace scope
}// end of namespace helper

#endif   /* HELPER_SCOPE_ISCOPABLE_H */
